package br.com.controller.disciplina;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import br.com.arquitetura.controlador.AbstractMBean;
import br.com.arquitetura.excecoes.BDException;
import br.com.arquitetura.servico.ServiceCadastro;
import br.com.data.hibernate.DisciplinaHibernateDAO;
import br.com.model.entidade.Disciplina;

@ManagedBean
@ViewScoped
public class MBDisciplina extends AbstractMBean<Disciplina>{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Disciplina disciplina;
	private Disciplina disciplinaVisualizacao;
	private List<Disciplina> listaDisc;
	private boolean editavel;
	private boolean visualizar;
	private DisciplinaHibernateDAO disciplinaHibernateDAO;
	
	@ManagedProperty(value="#{serviceCadastro}")
	private ServiceCadastro serviceCadastro;
	
	public void setServiceCadastro(ServiceCadastro serviceCadastro) {
		this.serviceCadastro = serviceCadastro;
	}
	
	
	
	public Disciplina getDisciplinaVisualizacao() {
		return disciplinaVisualizacao;
	}



	public void setDisciplinaVisualizacao(Disciplina disciplinaVisualizacao) {
		this.disciplinaVisualizacao = disciplinaVisualizacao;
	}



	public MBDisciplina(){
		this.disciplina = new Disciplina();
		
		this.disciplinaHibernateDAO = (DisciplinaHibernateDAO) getBean("disciplinaHibernateDAO");
		
		this.limpar();
	}
	
	public void cadastrar(){
		try {
			this.serviceCadastro.salvar(disciplina);
			this.limpar();
			FacesContext.getCurrentInstance().addMessage(null,new FacesMessage("Sucesso", "Disciplina cadastrada com sucesso!"));
		} catch (BDException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			FacesContext.getCurrentInstance().addMessage(null,new FacesMessage("Erro", "Erro ao cadastrar!"));
		}
	}
	
	public void remover(){
		try {
			this.serviceCadastro.excluir(disciplina);
			this.limpar();
			FacesContext.getCurrentInstance().addMessage(null,new FacesMessage("Sucesso", "Disciplina removida com sucesso!"));
		} catch (BDException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			FacesContext.getCurrentInstance().addMessage(null,new FacesMessage("Erro", "Erro ao remover!"));
		}
	}
	
	public void editar(){
		try {
			this.serviceCadastro.atualizar(disciplina);
			this.limpar();
			FacesContext.getCurrentInstance().addMessage(null,new FacesMessage("Sucesso", "Disciplina alterada com sucesso!"));
		} catch (BDException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			FacesContext.getCurrentInstance().addMessage(null,new FacesMessage("Erro", "Erro ao editar!"));
		}
		
	}
	
	public void irEditar(){
		editavel = true;
	}
	
	public void limpar(){
		disciplina = new Disciplina();
		editavel= false;
		visualizar= false;
		this.listaDisc = disciplinaHibernateDAO.listAll(Disciplina.class);
	}
	
	public void mudarVisualizar(){
		this.visualizar = !visualizar;
	}
	
	public Disciplina getDisciplina() {
		return disciplina;
	}

	public void setDisciplina(Disciplina disciplina) {
		this.disciplina = disciplina;
	}

	public List<Disciplina> getListaDisc() {
		return listaDisc;
	}

	public void setListaDisc(List<Disciplina> listaDisc) {
		this.listaDisc = listaDisc;
	}

	public boolean isEditavel() {
		return editavel;
	}

	public void setEditavel(boolean editavel) {
		this.editavel = editavel;
	}

	public boolean isVisualizar() {
		return visualizar;
	}

	public void setVisualizar(boolean visualizar) {
		this.visualizar = visualizar;
	}
	
	
}
